package YAPserver.collisionEngine;

import YAPserver.gameObjects.Point;

public interface Ball extends GameObject{
	/**
	 * Moves this ballAbstract.
	 */
	public void move();
	/**
	 * Causes this ball to change it's angle according to the angle of the wall. Basically the ball will get such
	 * an angle so that it looks like the ball bounces off the wall.
	 * @param wall
	 */
	public void bounce(Wall wall);
	/**
	 * Sets the speed of this ballAbstract.
	 * @param speed new speed
	 */
	public void setSpeed(double speed);
	/**
	 * Sets the angle of this ballAbstract.
	 * @param angle new angle
	 */
	public void setAngle(double angle);
	/**
	 * Sets the radius of this ballAbstract.
	 * @param radius new radius
	 */
	public void setRadius(double radius);
	/**
	 * Sets the next middle point of the ballAbstract. That means the position the ballAbstract will have in the next round.
	 * @param point new point that the ballAbstract will move to
	 */
	public void setNextMiddlePoint(Point point);
	/**
	 * Returns the speed of this ballAbstract.
	 * @return the speed of this ballAbstract
	 */
	public double getSpeed();
	/**
	 * Returns the angle of this ballAbstract.
	 * @return the angle of this ballAbstract
	 */
	public double getAngle();
	/**
	 * Returns the radius of this ballAbstract.
	 * @return the radius of this ballAbstract
	 */
	public double getRadius();
	/**
	 * Returns the next middle point of this ballAbstract.
	 * @return the next middle point of this ballAbstract
	 */
	public Point getNextMiddlePoint();
	/**
	 * Returns whether this gameBall is in the field or not.
	 * @return <code>true</code> if the gameBall is in the field and <code>false</code> otherwise
	 */
	public boolean isOnField();
	/**
	 * Sets whether this gameBall is in the field or not.
	 * @param onField boolean stating the wherabouts of this gameBall
	 */
	public void setOnField(boolean onField);
}
